Главная страница / Полезная информация по таблице свойств (ShapeSheet™) / Справочник по таблице свойств / Список функций по алфавиту / Список функций по категориям > Управление содержимым ячеек
Функция SETATREF |
Перенаправляет обновленные значения, которые получены в результате действий, выполненных с помощью пользовательского интерфейса или автоматизации, в другую ячейку.
Синтаксис
SETATREF(reference [,set_expression [,ignore_eval]])
Parameters
Имя | Требуется/Необязательно | Тип данных | Описание |
reference | Требуется | Строка | Ссылка на ячейку, в которую перенаправляются обновления. |
set_expression | Необязательно | Строка | Выражение, присваиваемое аргументу reference. |
ignore_eval | Необязательно | Логический | Если этот аргумент имеет значение ИСТИНА, функция SETATREF возвращает 0; в противном случае возвращается значение аргумента reference. |
Заметки
Когда действие пользователя в окне документа или метод автоматизации приводят к тому, что Microsoft Visio обновляет ячейку с формулой SETATREF, значение перенаправляется в ячейку, на которую ссылается формула SETATREF (reference). Формула в ячейке, содержащей функцию SETATREF, остается прежней.
Если аргумент set_expression опущен, значение, заданное с помощью пользовательского интерфейса или автоматизации, присваивается ячейке, на которую указывает ссылка; в противном случае этой ячейке присваивается значение аргумента set_expression. Это позволяет изменить или преобразовать новое значение, прежде чем присвоить его ячейке по ссылке.
С функцией SETATREF связаны две другие функции:
функция SETATREFEXPR, которую можно использовать для представления нового значения в выражении set_expression (например, если аргумент set_expression содержит выражение SETATREFEXPR()-2 cm, из результата функции SETATREFEXPR вычитаются два сантиметра );
функция SETATREFEVAL, которая позволяет указать, что некоторую часть выражения set_expression следует вычислить и заменить ее результатами.
Функция SETATREF предназначена для использования в ячейках, которые могут быть изменены в результате действий пользователя в окне документа. Поддерживаются такие типы ячеек:
раздел преобразования фигуры — ячейки Width, Height, Angle, PinX и PinY;
раздел преобразования текста — ячейки TxtWidth, TxtHeight, TxtAngle, TxtPinX и TxtPinY;
раздел одномерных конечных точек — ячейки BeginX, BeginY, EndX и EndY;
раздел элементов управления — ячейки Controls.X и Controls.Y;
раздел данных фигуры.
Поскольку функция SETATREF модифицирует место изменения значений ячеек, она влияет на запуск событий. Если ячейка содержит функцию SETATREF, события FormulaChanged и CellChanged запускаются для ячейки, указанной в функции SETATREF, а не для ячейки, содержащей эту функцию. Если ячейка, содержащая функцию SETATREF, содержит также функцию SETATREFEXPR, событие FormulaChanged запускается и для ячейки с функцией SETATREF, поскольку изменяется параметр функции.
Следует отметить еще ряд важных моментов, связанных с функцией SETATREF.
Функции SETATREF могут объединять в цепочку до 10 ссылок на другие функции SETATREF.
Ячейки могут содержать помимо функции SETATREF и другие выражения (в том числе несколько экземпляров SETATREF в одной ячейке).
Если фигуры склеены, Visio следует по цепочке ссылок SETATREF на том же листе и помещает склеенные формулы в ячейку, на которую указывает ссылка.
Средства автоматизации распознают функцию SETATREF и следуют по цепочке ячеек, на которые указывают ссылки.
Как и функция GUARD, SETATREF не защищает ячейки от изменений, сделанных с помощью функции SETF в таблице свойств фигуры.
Пример 1
Предположим, что у фигуры есть настраиваемое свойство ширины Width, а ячейка Width в разделе преобразования фигуры содержит следующую формулу:
=SETATREF(Prop.Width)
Если ширина фигуры изменяется в пользовательском интерфейсе, новое значение присваивается ячейке Prop.Width, а не ячейке Width в разделе преобразования фигуры. Формула в ячейке Width при этом не изменяется. Задать ширину фигуры также можно с помощью данных фигуры.
Пример 2
Решения Visio часто содержат фигуры с иерархической структурой отношений, т. е. при перемещении родительских фигур должны перемещаться и дочерние. В примере ниже показано, как можно управлять этими отношениями с помощью функции SETATREF в таблице свойств фигуры.
Указанные ниже формулы содержатся в разделе преобразования фигуры дочерней фигуры. Кроме того, определены пользовательские ячейки User.DeltaX и User.DeltaY, предназначенные для отслеживания величины перемещения родительской фигуры. В результате дочерняя фигура перемещается при перемещении родительской, а при перемещении дочерней фигуры иерархическая структура сохраняется.
PinX =SETATREF(User.DeltaX, SETATREFEVAL(SETATREFEXPR() - ParentShape!PinX)) + ParentShape!PinX
PinY =SETATREF(User.DeltaY, SETATREFEVAL(SETATREFEXPR() - ParentShape!PinY)) + ParentShape!PinY
При перемещении дочерней фигуры с помощью пользовательского интерфейса новые значения PinX и PinY задаются как параметры в функции SETATREFEXPR. Функция SETATREF вычисляет формулу, вложенную в функцию SETATREFEVAL, и заменяет параметры PinX и PinY результатами вычисления, а затем получившаяся формула присваивается пользовательским ячейкам, указанным в функции SETATREF (User.DeltaX и User.DeltaY). Наконец, значения, возвращенные функцией SETATREF (User.DeltaX и User.DeltaY), добавляются к координатам точки привязки родительской фигуры, чтобы вычислить точку привязки дочерней фигуры.
© Корпорация Майкрософт (Microsoft Corporation). Все права защищены.